$OpenBSD: patch-gcc_gcc_c,v 1.2 2012/09/01 00:00:33 pascal Exp $
--- gcc/gcc.c.orig	Mon Mar  5 21:37:05 2007
+++ gcc/gcc.c	Thu Aug 30 11:24:50 2012
@@ -684,7 +684,7 @@ proper position among the other output files.  */
 
 #ifndef LINK_PIE_SPEC
 #ifdef HAVE_LD_PIE
-#define LINK_PIE_SPEC "%{pie:-pie} "
+#define LINK_PIE_SPEC "%{pie:-pie} %{p|pg|nopie:-nopie} "
 #else
 #define LINK_PIE_SPEC "%{pie:} "
 #endif
@@ -1313,7 +1313,7 @@ translate_options (int *argcp, const char *const **arg
 		  /* Store the translation as one argv elt or as two.  */
 		  if (arg != 0 && strchr (arginfo, 'j') != 0)
 		    newv[newindex++] = concat (option_map[j].equivalent, arg,
-					       NULL);
+					       (void *)0);
 		  else if (arg != 0)
 		    {
 		      newv[newindex++] = option_map[j].equivalent;
@@ -1642,7 +1642,7 @@ init_gcc_specs (struct obstack *obstack, const char *s
 		"%{shared:", shared_name, "}"
 #endif
 #endif
-		"}}", NULL);
+		"}}", (void *)0);
 
   obstack_grow (obstack, buf, strlen (buf));
   free (buf);
@@ -1840,7 +1840,7 @@ set_spec (const char *name, const char *spec)
 
   old_spec = *(sl->ptr_spec);
   *(sl->ptr_spec) = ((spec[0] == '+' && ISSPACE ((unsigned char)spec[1]))
-		     ? concat (old_spec, spec + 1, NULL)
+		     ? concat (old_spec, spec + 1, (void *)0)
 		     : xstrdup (spec));
 
 #ifdef DEBUG_SPECS
@@ -2410,12 +2410,12 @@ for_each_path (const struct path_prefix *paths,
   just_multi_suffix = just_machine_suffix;
   if (do_multi && multilib_dir && strcmp (multilib_dir, ".") != 0)
     {
-      multi_dir = concat (multilib_dir, dir_separator_str, NULL);
-      multi_suffix = concat (multi_suffix, multi_dir, NULL);
-      just_multi_suffix = concat (just_multi_suffix, multi_dir, NULL);
+      multi_dir = concat (multilib_dir, dir_separator_str, (void *)0);
+      multi_suffix = concat (multi_suffix, multi_dir, (void *)0);
+      just_multi_suffix = concat (just_multi_suffix, multi_dir, (void *)0);
     }
   if (do_multi && multilib_os_dir && strcmp (multilib_os_dir, ".") != 0)
-    multi_os_dir = concat (multilib_os_dir, dir_separator_str, NULL);
+    multi_os_dir = concat (multilib_os_dir, dir_separator_str, (void *)0);
 
   while (1)
     {
@@ -2761,8 +2761,8 @@ add_sysrooted_prefix (struct path_prefix *pprefix, con
   if (target_system_root)
     {
       if (target_sysroot_suffix)
-	  prefix = concat (target_sysroot_suffix, prefix, NULL);
-      prefix = concat (target_system_root, prefix, NULL);
+	  prefix = concat (target_sysroot_suffix, prefix, (void *)0);
+      prefix = concat (target_system_root, prefix, (void *)0);
 
       /* We have to override this because GCC's notion of sysroot
 	 moves along with GCC.  */
@@ -3344,7 +3344,7 @@ process_command (int argc, const char **argv)
 	  break;
       new_argv0 = xmemdup (progname, baselen,
 			   baselen + concat_length (new_version, new_machine,
-						    "-gcc-", NULL) + 1);
+						    "-gcc-", (void *)0) + 1);
       strcpy (new_argv0 + baselen, new_machine);
       strcat (new_argv0, "-gcc-");
       strcat (new_argv0, new_version);
@@ -3371,7 +3371,7 @@ process_command (int argc, const char **argv)
 						 standard_bindir_prefix,
 						 standard_libexec_prefix);
       if (gcc_exec_prefix)
-	putenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL));
+	putenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, (void *)0));
     }
   else
     {
@@ -3379,7 +3379,7 @@ process_command (int argc, const char **argv)
 	 GCC_EXEC_PREFIX is typically a directory name with a trailing
 	 / (which is ignored by make_relative_prefix), so append a
 	 program name.  */
-      char *tmp_prefix = concat (gcc_exec_prefix, "gcc", NULL);
+      char *tmp_prefix = concat (gcc_exec_prefix, "gcc", (void *)0);
       gcc_libexec_prefix = make_relative_prefix (tmp_prefix,
 						 standard_exec_prefix,
 						 standard_libexec_prefix);
@@ -3426,7 +3426,7 @@ process_command (int argc, const char **argv)
 	    {
 	      strncpy (nstore, startp, endp - startp);
 	      if (endp == startp)
-		strcpy (nstore, concat (".", dir_separator_str, NULL));
+		strcpy (nstore, concat (".", dir_separator_str, (void *)0));
 	      else if (!IS_DIR_SEPARATOR (endp[-1]))
 		{
 		  nstore[endp - startp] = DIR_SEPARATOR;
@@ -3460,7 +3460,7 @@ process_command (int argc, const char **argv)
 	    {
 	      strncpy (nstore, startp, endp - startp);
 	      if (endp == startp)
-		strcpy (nstore, concat (".", dir_separator_str, NULL));
+		strcpy (nstore, concat (".", dir_separator_str, (void *)0));
 	      else if (!IS_DIR_SEPARATOR (endp[-1]))
 		{
 		  nstore[endp - startp] = DIR_SEPARATOR;
@@ -3493,7 +3493,7 @@ process_command (int argc, const char **argv)
 	    {
 	      strncpy (nstore, startp, endp - startp);
 	      if (endp == startp)
-		strcpy (nstore, concat (".", dir_separator_str, NULL));
+		strcpy (nstore, concat (".", dir_separator_str, (void *)0));
 	      else if (!IS_DIR_SEPARATOR (endp[-1]))
 		{
 		  nstore[endp - startp] = DIR_SEPARATOR;
@@ -3961,7 +3961,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR 
 	      PREFIX_PRIORITY_LAST, 1, 0);
 
   tooldir_prefix = concat (tooldir_base_prefix, spec_machine,
-			   dir_separator_str, NULL);
+			   dir_separator_str, (void *)0);
 
   /* If tooldir is relative, base it on exec_prefixes.  A relative
      tooldir lets us move the installed tree as a unit.
@@ -3976,28 +3976,28 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR 
 	{
 	  char *gcc_exec_tooldir_prefix
 	    = concat (gcc_exec_prefix, spec_machine, dir_separator_str,
-		      spec_version, dir_separator_str, tooldir_prefix, NULL);
+		      spec_version, dir_separator_str, tooldir_prefix, (void *)0);
 
 	  add_prefix (&exec_prefixes,
 		      concat (gcc_exec_tooldir_prefix, "bin",
-			      dir_separator_str, NULL),
+			      dir_separator_str, (void *)0),
 		      NULL, PREFIX_PRIORITY_LAST, 0, 0);
 	  add_prefix (&startfile_prefixes,
 		      concat (gcc_exec_tooldir_prefix, "lib",
-			      dir_separator_str, NULL),
+			      dir_separator_str, (void *)0),
 		      NULL, PREFIX_PRIORITY_LAST, 0, 1);
 	}
 
       tooldir_prefix = concat (standard_exec_prefix, spec_machine,
 			       dir_separator_str, spec_version,
-			       dir_separator_str, tooldir_prefix, NULL);
+			       dir_separator_str, tooldir_prefix, (void *)0);
     }
 
   add_prefix (&exec_prefixes,
-	      concat (tooldir_prefix, "bin", dir_separator_str, NULL),
+	      concat (tooldir_prefix, "bin", dir_separator_str, (void *)0),
 	      "BINUTILS", PREFIX_PRIORITY_LAST, 0, 0);
   add_prefix (&startfile_prefixes,
-	      concat (tooldir_prefix, "lib", dir_separator_str, NULL),
+	      concat (tooldir_prefix, "lib", dir_separator_str, (void *)0),
 	      "BINUTILS", PREFIX_PRIORITY_LAST, 0, 1);
 
 #if defined(TARGET_SYSTEM_ROOT_RELOCATABLE) && !defined(VMS)
@@ -4121,7 +4121,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR 
 	{ /* POSIX allows separation of -l and the lib arg;
 	     canonicalize by concatenating -l with its arg */
 	  infiles[n_infiles].language = "*";
-	  infiles[n_infiles++].name = concat ("-l", argv[++i], NULL);
+	  infiles[n_infiles++].name = concat ("-l", argv[++i], (void *)0);
 	}
       else if (strncmp (argv[i], "-l", 2) == 0)
 	{
@@ -6202,8 +6202,8 @@ main (int argc, char **argv)
   /* Read specs from a file if there is one.  */
 
   machine_suffix = concat (spec_machine, dir_separator_str,
-			   spec_version, dir_separator_str, NULL);
-  just_machine_suffix = concat (spec_machine, dir_separator_str, NULL);
+			   spec_version, dir_separator_str, (void *)0);
+  just_machine_suffix = concat (spec_machine, dir_separator_str, (void *)0);
 
   specs_file = find_a_file (&startfile_prefixes, "specs", R_OK, true);
   /* Read the specs file unless it is a default one.  */
@@ -6317,12 +6317,12 @@ main (int argc, char **argv)
 	  if (gcc_exec_prefix)
 	    add_prefix (&startfile_prefixes,
 			concat (gcc_exec_prefix, machine_suffix,
-				standard_startfile_prefix, NULL),
+				standard_startfile_prefix, (void *)0),
 			NULL, PREFIX_PRIORITY_LAST, 0, 1);
 	  add_prefix (&startfile_prefixes,
 		      concat (standard_exec_prefix,
 			      machine_suffix,
-			      standard_startfile_prefix, NULL),
+			      standard_startfile_prefix, (void *)0),
 		      NULL, PREFIX_PRIORITY_LAST, 0, 1);
 	}
 
@@ -6348,7 +6348,7 @@ main (int argc, char **argv)
   /* If we have a GCC_EXEC_PREFIX envvar, modify it for cpp's sake.  */
   if (gcc_exec_prefix)
     gcc_exec_prefix = concat (gcc_exec_prefix, spec_machine, dir_separator_str,
-			      spec_version, dir_separator_str, NULL);
+			      spec_version, dir_separator_str, (void *)0);
 
   /* Now we have the specs.
      Set the `valid' bits for switches that match anything in any spec.  */
